import voca from 'voca'
import dayjs from 'dayjs'

const actions = {
  clearUser() {
    this.$patch((state) => {
      state.user = null
    })
  },
  setUser(user) {
    console.log('store.setUser', user)
    // 尝试登陆用户的过期秒数
    let seconds = user.expire
    if (seconds == null || seconds == undefined || seconds == '' || seconds <= 0) {
      seconds = 7200 // 登录用户实体没有超时属性，默认2小时
    }
    // 注入过期的时间
    user.expireTime = dayjs().add(seconds, 'seconds').toDate() // 当前时间+过期秒数
    console.log('注入过期时间：', user.expireTime)
    // 将带有过期时间的用户数据存储到 store
    this.$patch((state) => {
      state.user = user
    })
  },
  getToken() {
    // getters 带有缓存，所以获取令牌并计算是否失效，改用 action 完成
    if (this.user == null || voca.isBlank(this.user.token) || this.user.expireTime == null) {
      // 用户对象为空，或者没有令牌，或者没有失效期
      console.log('用户对象为空，或者没有令牌，或者没有失效期')
      return null
    }
    const seconds = dayjs().diff(dayjs(this.user.expireTime), 'seconds')
    console.log('令牌过期秒数：' + seconds)
    if (seconds > 1) {
      console.log('令牌已过期')
      return null
    }
    // 令牌有效而且没过期
    return this.user.token
  },
  isLogin() {
    const token = this.getToken()
    return !voca.isBlank(token) // 令牌存在而且有效，为登录状态
  }
}

export default actions
